package com.mobile.util;

import java.math.BigInteger;
import java.util.List;
import java.util.Map;

/**
 * @ClassName : RightsHelper.java
 * @Decription : 权限计算帮助类
 * @Version : 2018/01/11  hlh  新建作成   1.0
 */
public class RightsHelper {
	/**
	 * 利用BigInteger对权限进行2的权的和计算
	 * @param rights int型权限编码数组
	 * @return 2的权的和
	 */
	public static BigInteger sumRights(int[] rights){
		BigInteger num = new BigInteger("0");
		for(int i=0; i<rights.length; i++){
			num = num.setBit(rights[i]);
		}
		return num;
	}
	/**
	 * 利用BigInteger对权限进行2的权的和计算
	 * @param rights String型权限编码数组
	 * @return 2的权的和
	 */
	public static BigInteger sumRights(String[] rights){
		BigInteger num = new BigInteger("0");
		for(int i=0; i<rights.length; i++){
			num = num.setBit(Integer.parseInt(rights[i]));
		}
		return num;
	}

	/**
	 * 利用BigInteger对菜单权限进行2的权的和计算
	 * @param listParam 全部菜单数据
	 * @return 2的权的和
	 */
	public static BigInteger sumRights(List<PageData> listParam){
		BigInteger num = new BigInteger("0");
		PageData itemFunction = null;
		for(int i=0; i<listParam.size(); i++){
			itemFunction = listParam.get(i);
			// 当前菜单有查询权限场合
			if (itemFunction.get("func_is_auth").toString().split(",")[3].indexOf(Const.AUTH_HAVE) >= 0) {
				num = num.setBit(Integer.parseInt(itemFunction.get("function_id").toString()));
				// 子菜单有权限时，父类菜单也可操作。
				num = num.setBit(Integer.parseInt(itemFunction.get("parent_id").toString()));
			}
		}
		return num;
	}

	/**
	 * 根据菜单ID获取当前菜单的全部权限值
	 * @param listParam 全部菜单数据
	 * @param menuId  当前菜单ID
	 * @return 当前菜单全部权限值
	 */
	/*
	 * public static Map<String, String> sumButtonRights(List<MFunction> listParam,
	 * String menuId){ MFunction itemFunction = null; String[] authCodeArray = null;
	 * String[] isAuthHasArray = null; Map<String, String> map = new HashMap<String,
	 * String>();
	 *
	 * for(int n = 0; n < listParam.size(); n++) { itemFunction = listParam.get(n);
	 * if (menuId.equals(itemFunction.getFunctionId())) { authCodeArray =
	 * itemFunction.getFuncAuthCode().split(","); isAuthHasArray =
	 * itemFunction.getFuncIsAuth().split(","); for (int m = 0; m <
	 * authCodeArray.length; m++) { // 设置当前页面按钮使用权限 map.put(authCodeArray[m],
	 * isAuthHasArray[m]); } break; } }
	 *
	 * // 结果返回 return map; }
	 */

	/**
	 * 判断当前菜单按钮使用权限
	 * @param map 当前菜单所有按钮权限
	 * @param authCode  权限CODE
	 * @return 当前菜单全部权限值
	 */
	public static String checkButtonRights(Map<String, String> map, String authCode){
		// 包含当前权限场合
		return map.containsKey(authCode) ? map.get(authCode) : Const.AUTH_NONE;
	}

	/**
	 * 测试是否具有指定编码的权限
	 * @param sum
	 * @param targetRights
	 * @return
	 */
	public static boolean testRights(BigInteger sum,int targetRights){
		return sum.testBit(targetRights);
	}

	/**
	 * 测试是否具有指定编码的权限
	 * @param sum
	 * @param targetRights
	 * @return
	 */
	public static boolean testRights(String sum,int targetRights){
		if(StringUtil.isEmpty(sum))
			return false;
		return testRights(new BigInteger(sum),targetRights);
	}

	/**
	 * 测试是否具有指定编码的权限
	 * @param sum
	 * @param targetRights
	 * @return
	 */
	public static boolean testRights(String sum,String targetRights){
		if(StringUtil.isEmpty(sum))
			return false;
		return testRights(new BigInteger(sum),targetRights);
	}

	/**
	 * 测试是否具有指定编码的权限
	 * @param sum
	 * @param targetRights
	 * @return
	 */
	public static boolean testRights(BigInteger sum,String targetRights){
		return testRights(sum,Integer.parseInt(targetRights));
	}
}
